package cn.tedu.api;
// 测试 list接口
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class Test4_List {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("张三");
        list.add("李四");
        list.add("王五");
        list.add("王五");
        list.add(null);
        list.add(null);
        System.out.println(list);
        //TODO 1 list接口的特点：元素有效+元素可重复+可以存多个null
//        method(list);//继承来自 Collection接口的方法
        method2(list);
    }
    public  static void method2(List<String> b){
        b.add(4,"李四");//在指定的索引处，插入指定的元素
        System.out.println(b);
        b.get(3);
        System.out.println(b.get(3));//根据下标获取元素

        System.out.println(b.indexOf("王五"));//获取指定数据第一次出现的索引值
        System.out.println(b.lastIndexOf("王五"));//获取指定数据最后一次出现的索引值
        System.out.println(b.remove(3));//根据下标删除元素，并把删除元素返回。
        System.out.println(b);

        System.out.println(b.set(5,"龙一"));
        System.out.println(b);

        System.out.println(b.subList(3,5));//截取，含头不含尾
        System.out.println(b);//截取后原数组不变

        System.out.println(b.size());
//        迭代List集合的元素
//方式一：Iterator<E>  iterator()----继承来自Collection
        Iterator<String> it = b.iterator();
        while (it.hasNext()){//有元素再获取
            String s = it.next();
            System.out.println(s+"====");
        }
//        方式二: ListIterator<E> ListIterator()----List接口特有的
        //面试题：iterator和listIterator有什么区别？
        //答：出处不一样，  返回值是Iterator接口和 ListIterator接口，是继承关系。
        //ListIterator接口是一个子接口能用父接口的所有方法，而且做了方法扩展(逆向遍历)。
        ListIterator<String> it2 = b.listIterator();
        while (it2.hasNext()){
            String s= it2.next();
            System.out.println(s+"~~~~");
        }
        //逆向遍历--了解--必须先顺序遍历
        while (it2.hasPrevious()){
            String s = it2.previous();
            System.out.println(s+"@@@@");
        }
//方式三：由于list集合有下标，可以按照下标遍历
        for (int i = 0; i <b.size() ; i++) {
            String s = b.get(i);//根据下标获取元素
            System.out.println(s+"$$$$");
        }
//        方式四： 增强for
        for(String s :b){
            System.out.println(s+"****");
        }

    }
    public static void method(List<String> a){
        for(String s:a){
            System.out.println(s);
        }
        a.add("法外狂徒");
        System.out.println(a);
        a.remove("法外狂徒");
        System.out.println(a);

        a.contains("张三");
        System.out.println(a.contains("张三"));
        a.equals("klj");
        System.out.println(a.equals("klj"));
        System.out.println(a.isEmpty());
    }
}
